Перейти к основному содержимому

1.20. Архивы и установочные пакеты

Всем

Архивы и установочные пакеты

Для распространения программ используются архивы и установочные пакеты. Они позволяют упаковать все необходимые файлы в один контейнер, что упрощает загрузку и установку. Архивы используются для сжатия файлов, чтобы уменьшить их размер.

ФорматОписаниеОсобенности
.ZIPСтандартный архивПоддержка в Windows без дополнительного ПО
.RARАрхив с высокой степенью сжатияТребуется WinRAR / 7Z
.7ZАрхив с максимальным сжатиемТребуется WinRAR / 7Z
.CABСистемные архивы Windows, которые часто используются для драйверов и обновлений.Используется для драйверов
.ISOОбраз оптического дискаМонтируется как виртуальный привод
.DMGФормат для распространения программ (пакет для установки) на macOSmacOS
.DEBФормат для распространения программ (пакет для установки) на Debian/UbuntuDebian/Ubuntu
.RPMФормат для распространения программ (пакет для установки) на Red Hat/FedoraRed Hat/Fedora
.APKПакет AndroidAndroid
.IPAПакет iOSiOS

Есть один распространённый миф, связанный с архивацией. Задумался об этом буквально недавно - друг обратился с вопросом - «Я хотел архивировать данные - но почему после сжатия размер остался тем же?». Вот тут и работает такой миф, что архивирование всегда уменьшает объём файлов. Но это не так - когда создаётся архив (к примеру, RAR), программа пытается сжать данные, используя алгоритмы, которые идут как повторяющиеся фрагменты и кодируют их более компактно. И если файл уже сильно сжат (как в JPG, MP4, MP3, ZIP), или содержит случайные данные без закономерностей (зашифрованные файлы), то новый этап сжатия ничего не даёт, потому архив и получается того же размера, что и оригинал - или даже чуть больше из-за служебной информации.

В каком случае архивация эффективна, а когда бесполезна?

  1. Архивация эффективна для текстовых файлов - TXT, CSV, LOG, XML, HTML. Там много повторений слов, символов, пробелов, из-за чего они отлично сжимаются - до 90%.
  2. Необработанные данные так же отлично архивируются - это RAW изображения (BMP), WAV файлы, логи, дампы (выгрузки) баз данных, а также несжатые изображения TGA.
  3. Сжатые форматы повторно не сжать, поэтому архиватор не справится с видео (силами кодеков) - MP4, MKV, AVI, аудио - MP3, AAC, OGG, и конечно изображения - JPG, PNG, WEBP.
  4. Зашифрованные файлы тоже не архивируются, так как данные там случайные, из-за чего нет повторений. Случайные данные (в том числе генерируемые программно бинарные файлы без закономерностей), такие как результаты шифрования, хэши не будут сжаты.

Таким образом, архивация эффективна, когда файлы имеют высокую степень избыточности , то есть содержат много повторяющихся данных. А неэффективна, когда файлы уже оптимизированы или зашифрованы.

Алгоритмы архивации работают по принципу поиска паттернов в данных и замены их на более короткие коды. К примеру, если в тексте часто встречается слово «Навуходоносор», архиватор заменит его, к примеру, на короткий код #123. Это называется алгоритмом Хаффмана – оптимизация под частоту появления символов. Так же применяется LZ77/LZMA – поиск и замена повторяющихся последовательностей. И если же таких паттернов нет, то и сжать нечего.

Архивировать лучше для объединения множества мелких файлов (так обмениваться проще - если в папке 1000 файлов, лучше передать одним объединённым «пакетом»). На практике это работает так, что на сервере записи логов за каждый день могут весить, к примеру, 10 МБ, а через 100 дней - это уже 1 ГБ. И если сжать их, они будут занимать в пределах 200-300 МБ, что намного эффективнее для хранения.

Практическое задание
Попробуйте создать архив и упаковать туда любой файл весом больше, чем 10 килобайт.